package main

import (
	"fmt"
	"sync"
	"time"
)

//这里使用通知的方式去处理
var locker sync.Mutex
var cond = sync.NewCond(&locker)
var mail = 1

//master 进行分发 任务  我们的job转系自己的任务信息
func master() {
	for count := 0; count <= 15; count++ {
		time.Sleep(time.Second)
		mail = count
		cond.Broadcast()
	}
}
func job2() {
	fmt.Println("等待mater通知到我的条件完成发送通知")
	for mail != 1 {
		cond.L.Lock()
		cond.Wait()
		cond.L.Unlock()
	}
	fmt.Println("开始处理111")
	//处理完成这里是业务处理
	fmt.Println("这里是业务处理1111")
}

func job3() {
	fmt.Println("等待jo2完成发送通知")
	for mail != 4 {
		cond.L.Lock()
		cond.Wait()
		cond.L.Unlock()

	}
	fmt.Println("开始处理222")
	//处理完成这里是业务处理
	fmt.Println("这里是业务处理222")
}
func main() {
	go master()
	go job2()
	go job3()
	<-time.After(time.Second * 10)
}

//这里使用 通知的方式 但是并不是 可能在100都在精着呢 都需要进行枷锁防止竞争的方式
//我们这里使用通知和信息的方式去处理的方式
//我们这里去后处理方式
//rpcinterface srpcinterfaces
//最好的都是打包为 cpu io memory
// 新型 21的计算机的人出来
// 将自身和空壳进行分离出来 都是非常的舒服的方式
// 为了不是 chan 1
// 这个是明确能够知道协程能 close 其实就是 cap 为1
